package com.example.cruds.controller;

import cn.hutool.core.util.StrUtil;
import com.example.cruds.common.Result;
import com.example.cruds.entity.PageBean;
import com.example.cruds.entity.User;
import com.example.cruds.exception.ServiceException;
import com.example.cruds.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@CrossOrigin
@RestController
@RequestMapping("/user")

public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/add")
    // 增

    public Result add(@RequestBody User user) {
        userService.save(user);
        return Result.success();

    }

    // 改

    @PutMapping("/change")
    

    public Result change(@RequestBody User user) {
        userService.gai(user);
        return Result.success();

    }

    // 单个删除
    @DeleteMapping("/shanchu/{id}")
    public Result shanchu(@PathVariable int id) {
        userService.delete(id);
        return Result.success();
    }

    // 批量删除
    @DeleteMapping("/shanchu/piliang")
    public Result shanchuPingling(@RequestBody List<Integer> ids) {
        userService.deletePingliang(ids);
        return Result.success();
    }

    // 查询全部，需要返回值，并且是list集合，因为返回值是不只一个的
    @GetMapping("/chaAll")
    public Result chaAll() {
        List<User> users = userService.selectAlls();
        return Result.success(users);
    }


//根据id 查  所以跟根据id单个删除是差不多的，同样的都是传递id，返回的是单个信息，因为是查询，所以返回值要传值来进行接受

    @GetMapping("/cha/{id}")
    public Result cha(@PathVariable Integer id) {
        User user = userService.selectAll(id);
        return Result.success(user);
    }

    // 分页查询

    @GetMapping("/fen")
    public Result page(@RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer pageSize,
                        String name, String username, String phone) {
        PageBean pageBean = userService.page(page, pageSize,name,username,phone);
        // 只要是查询就是需要返回值的，并且这个分页查询的返回值就是 刚刚我们所定义的那个pageBean类
        return Result.success(pageBean);

    }

    // 登录

    @PostMapping("/login")
    public Result login(@RequestBody User user){
        if(StrUtil.isBlank(user.getUsername()) || StrUtil.isBlank(user.getPassword())){
            return Result.error("账户或者密码错误");
        }
        user = userService.login(user);
        return Result.success(user);

    }


    // 注册

    @PostMapping("/register")
    public Result register(@RequestBody User user){
        if(StrUtil.isBlank(user.getUsername())||StrUtil.isBlank(user.getPassword()) ||StrUtil.isBlank(user.getRole())){
            throw new ServiceException("输入不合法");
        }
        if(user.getUsername().length()>10||user.getPassword().length()>20){
            throw new ServiceException("长度过长");
        }
        user=userService.register(user); 
        return Result.success(user);
    }



}























